#ifndef SUB_ELEMENT_H
#define SUB_ELEMENT_H

#include <list>
#include <string>

#include "base_sub_element.h"
#include "multiplicity.h"

class SubElement : public BaseSubElement {
	
public:
	SubElement();
	virtual ~SubElement();
	void addMultiplicity(Multiplicity & aMult);
	void addChild(BaseSubElement & aElem);
	void addChildFirst(BaseSubElement & aElem);
	virtual std::string generateRegex(DoctypeDefinition* dtd) = 0;
	
	virtual void print(std::ostream& out) = 0;
	
protected:
	Multiplicity* multiplicity;
	std::list<BaseSubElement*> children;

};

#endif //SUB_ELEMENT_H
